package com.linkgie.galaxyframework.crypto;

/**
 * 签名操作；
 * 
 * @author liso
 *
 */
public interface SignatureFunc {

	/**
	 * 对数据签名；
	 * 
	 * @param privKey 私钥；
	 * @param data    要签署的数据；
	 * @return
	 */
	Signature sign(PrivateKey privKey, byte[] data);

	/**
	 * 对数据签名；
	 * 
	 * @param privKey 私钥；
	 * @param data    要签署的数据；
	 * @param offset
	 * @param length
	 * @return
	 */
	Signature sign(PrivateKey privKey, byte[] data, int offset, int length);
	

	/**
	 * 对数据签名；
	 * 
	 * @param rawPrivKey 未编码的原始私钥；
	 * @param data    要签署的数据；
	 * @return 未编码的原始签名；
	 */
	byte[] sign(byte[] rawPrivKey, byte[] data);
	
	/**
	 * 对数据签名；
	 * 
	 * @param rawPrivKey 未编码的原始私钥；
	 * @param data    要签署的数据；
	 * @param offset
	 * @param length
	 * @return 未编码的原始签名；
	 */
	byte[] sign(byte[] rawPrivKey, byte[] data, int offset, int length);

	/**
	 * 验证签名；
	 * 
	 * @param signature
	 * @param pubKey
	 * @param data
	 * @return
	 */
	boolean verify(Signature signature, PublicKey pubKey, byte[] data);

	/**
	 * 验证签名；
	 * 
	 * @param signature
	 * @param pubKey
	 * @param data
	 * @param offset
	 * @param length
	 * @return
	 */
	boolean verify(Signature signature, PublicKey pubKey, byte[] data, int offset, int length);
	

	/**
	 * 验证签名；
	 * 
	 * @param rawSignature 未编码的原始签名；
	 * @param rawPubKey	未编码的原始公钥；
	 * @param data
	 * @return
	 */
	boolean verify(byte[] rawSignature, byte[] rawPubKey, byte[] data);
	
	/**
	 * 验证签名；
	 * 
	 * @param rawSignature 未编码的原始签名；
	 * @param rawPubKey	未编码的原始公钥；
	 * @param data
	 * @param offset
	 * @param length
	 * @return
	 */
	boolean verify(byte[] rawSignature, byte[] rawPubKey, byte[] data, int offset, int length);

}
